#   Copyright 2013 Stacy Doss stacy.doss@gmail.com
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

package DIME::View::Path;

sub new {

	my $class  = shift;
	my $parent = shift;
		
	my $T = {
        parent => $parent,
        path   => [],
        label  => '$ROOT',
	};
		
	bless $T, $class;

    $T->frame();

	return $T;
}


sub frame {
    my $self = shift;
    
    # Path bar
	$self->{frame} = $self->{parent}{MW}->Frame(-relief => 'raised', -bd => 2, -bg => 'grey');

	$self->{frame}->Label(-anchor  => 'w',
			  -text    => '$ROOT->',
			  -bg => 'grey',
			  -fg => 'blue',
			  -textvariable => \$self->{label},
			  )->pack(
					  -side => 'left', 
					  -expand => 'x', 
					  -fill   => 'x',
					  );
}


sub createLabel {
    my $self = shift;
    my $label = "\$ROOT->";
    
    for my $part (@{$self->{path}}) {
        my ($l, $r) = ('', '');
        if ($part->{type} eq '@') {
            ($l, $r) = ('[', ']');
        }
        if ($part->{type} eq '%') {
            ($l, $r) = ('{', '}');
        }
        $label = $label . "$l$part->{name}$r";        
    }
    $self->{label} = $label;
}



sub size {
    my $self = shift;
    return scalar @{$self->{path}};
}



sub delete {
    my $self = shift;

    my $path = undef;
    if (scalar @{$self->{path}}) {
        $path = pop(@{$self->{path}});
    }
    
    $self->createLabel();
}


sub clear {
    my $self = shift;

    my $path = undef;
    while (scalar @{$self->{path}}) {
        $path = pop(@{$self->{path}});
    }
    
    $self->createLabel();
}


sub add {
    my $self = shift;
    my $type = shift;
    my $name = shift;
    
    push(@{$self->{path}}, {type => $type, name => $name});
    $self->createLabel();
}


sub hide {
    my $self = shift;
    $self->{frame}->packForget();
}



sub show {
    my $self = shift;    
    $self->{frame}->pack(-side => 'top', -fill => 'x');
}


1;

__END__